Many companies and other organizations have created computer software applications designed to be hosted on their own enterprise systems. This requires the organizations to commit considerable resources to the design and maintenance of the enterprise systems that host the applications. For example, the organizations must employ many information technology professionals to ensure that the networks, storage systems, security settings, and other components of the enterprise systems continue to provide the proper levels of performance and security.
As an alternative model, a third-party provider may make its own computing systems available for hosting the organizations' applications. In this model, the third-party provider (hereinafter referred to as a “cloud provider”) supplies the hardware and software systems that provide the computing, storage, and network capacity required by the software applications, configures system settings to provide proper data security, and the like. Thus, the third-party provider is responsible for the technological and administrative details necessary for the applications to properly function, freeing the organizations from the need to attend to such details. The organizations can then supply the applications to the third-party provider for hosting, compensating the third-party provider according to the resources consumed, such as a certain amount of storage space, or a certain amount of computing power.
However, it can be complex, labor-intensive, and error-prone for an organization to modify its existing applications for migration to a third party cloud computing system so that they will function properly on the systems of the third-party providers. That is, the computing environment—e.g., hardware devices, operating system types and versions, network settings, and the like—of the third-party provider's system may differ significantly from that of the organization's enterprise computing systems, and hence an application will likely need to be significantly modified if it is to function properly in the third-party environment. For example, the operating system version made available by the third-party provider might differ from that of the enterprise system, leading (for example) to an unavailability of libraries expected by the application. Similarly, the Internet Protocol (IP) addresses of the third-party provider will differ from those of the enterprise system. The names of the storage devices, and system host names, will likely differ, as well. Thus, applications that make reference to these values will cease to function properly when hosted by the third-party provider.
Additionally, for reasons such as security and efficiency it may not be acceptable to host certain services of the enterprise system within the third-party environment. Thus, the applications migrated from the enterprise to the third-party environment will need to be able to communicate with the enterprise in order to access the services that would not be available from within the third-party environment. However, it requires additional effort to configure the applications running in the third-party environment to communicate with the services hosted on the remote enterprise. This additional configuration becomes particularly tedious and error-prone when many different systems are involved in providing services for the application (and hence many different systems must be properly configured), and/or many services are used by the application.